﻿using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using CeA.Reports.Atendimento.DataAccess;
using CeA.Reports.Atendimento.DataAccess.Criteria;
using CeA.Reports.Atendimento.DataAccess.DAO;
using CeA.Reports.Atendimento.DataAccess.DAO.Oracle;

namespace CeA.Reports.Atendimento.Web.WebControls {
    public partial class FiltroPlanejamento : System.Web.UI.UserControl {
        
        #region -- Event Model ------------------------------------------------

            // Event Keys
            private static readonly object FiltroEventKey = new object();

            
            // Delegates
            public delegate void FiltroPlanejamentoEventHandler(object sender, FiltroPlanejamentoEventArgs e);


            // Events
            public event FiltroPlanejamentoEventHandler Pesquisar {
                add {
                    Events.AddHandler(FiltroEventKey, value);
                }
                remove {
                    Events.RemoveHandler(FiltroEventKey, value);
                }
            }


            protected virtual void OnPesquisar(FiltroPlanejamentoEventArgs e) {
                FiltroPlanejamentoEventHandler handler = Events[FiltroEventKey] as FiltroPlanejamentoEventHandler;
                if (handler != null) {
                    handler(this, e);
                }
            }
        #endregion


        protected void Page_Init()                                                  {
            lstRFS.SelectedIndexChanged += new EventHandler(lstRFS_SelectedIndexChanged);
            lstRegiao.SelectedIndexChanged += new EventHandler(lstRegiao_SelectedIndexChanged);
            btnPesquisar.Click += new EventHandler(btnPesquisar_Click);
        }


        protected void Page_Load(object sender, EventArgs e)                        {
            if (Page.IsPostBack == false) {
                CarregaAllRfsListBox();
                CarregaAllRegiaoListBox();
                CarregaAllLojaListBox();
                CarregarAnoMes();
            }
        }
        

        protected void lstRFS_SelectedIndexChanged(object sender, EventArgs e)      {
            CarregaAllRegiaoListBox();
            CarregaAllLojaListBox();
        }


        protected void lstRegiao_SelectedIndexChanged(object sender, EventArgs e)   {
            CarregaAllLojaListBox();
        }


        private void btnPesquisar_Click(object sender, EventArgs e)                 {
            try {
                FiltroPlanejamentoEventArgs args = new FiltroPlanejamentoEventArgs();
                args.Loja =  Convert.ToInt32(lstLoja.SelectedValue);
                args.Ano = Convert.ToInt32(ddlAno.SelectedValue);
                args.Mes = Convert.ToInt32(ddlMes.SelectedValue);

                args.GeraGrafico = chkShowChart.Checked;
                args.ExportaRelatorio = chkExportRelatorio.Checked;

                OnPesquisar(args);

            } catch (Exception ex) {
                cvlMensagem.IsValid = false;
                cvlMensagem.Text = ex.Message;
            }
        }


        private void CarregaAllRfsListBox()     {
            DAOFactory factory = DAOFactory.GetDAOFactory(DAOFactoryType.ORACLE);
            Rfs daoRfs = factory.GetRfsDAO();
            RfsCriteria criteria = new RfsCriteria();

            lstRFS.DataSource = daoRfs.ListarIdentificacao(criteria);
            lstRFS.DataTextField = "nome";
            lstRFS.DataValueField = "id";

            lstRFS.DataBind();
            lstRFS.Items.Insert(0, new ListItem("-- Todos --", "0", true));
        }


        private void CarregaAllRegiaoListBox()  {
            DAOFactory factory = DAOFactory.GetDAOFactory(DAOFactoryType.ORACLE);

            Regiao daoRegiao = factory.GetRegiaoDAO();
            RegiaoCriteria criteria = new RegiaoCriteria();

            if (lstRFS.SelectedIndex > 0)
                foreach (ListItem item in lstRFS.Items) {
                    if (item.Selected)
                        criteria.addRfs(Convert.ToInt32(item.Value));
                }

            lstRegiao.DataSource = daoRegiao.ListarIdentificacao(criteria);
            lstRegiao.DataTextField = "nome";
            lstRegiao.DataValueField = "id";

            lstRegiao.DataBind();
            lstRegiao.Items.Insert(0, new ListItem("-- Todos --", "0", true));
        }


        private void CarregaAllLojaListBox()    {
            DAOFactory factory = DAOFactory.GetDAOFactory(DAOFactoryType.ORACLE);

            Loja daoLoja = factory.GetLojaDAO();
            LojaCriteria criteria = new LojaCriteria();

            //RFS
            if (lstRFS.SelectedIndex > 0)
                foreach (ListItem item in lstRFS.Items) {
                    if (item.Selected)
                        criteria.addRfs(Convert.ToInt32(item.Value));
                }

            //REGIÃO
            if(lstRegiao.SelectedIndex > 0)
                foreach (ListItem item in lstRegiao.Items) {
                    if (item.Selected)
                        criteria.addRegiao(Convert.ToInt32(item.Value));
                }

            lstLoja.DataSource = daoLoja.ListarIdentificacao(criteria);
            lstLoja.DataTextField = "nome";
            lstLoja.DataValueField = "id";

            lstLoja.DataBind();
            lstLoja.Items.Insert(0, new ListItem("-- Todos --", "0", true));
        }


        private void CarregarAnoMes()           { 
            ddlMes.Items.Add(new ListItem("Janeiro",   "1"));
            ddlMes.Items.Add(new ListItem("Fevereiro", "2"));
            ddlMes.Items.Add(new ListItem("Março",     "3"));
            ddlMes.Items.Add(new ListItem("Abril",     "4"));
            ddlMes.Items.Add(new ListItem("Maio",      "5"));
            ddlMes.Items.Add(new ListItem("Junho",     "6"));
            ddlMes.Items.Add(new ListItem("Julho",     "7"));
            ddlMes.Items.Add(new ListItem("Agosto",    "8"));
            ddlMes.Items.Add(new ListItem("Setembro",  "9"));
            ddlMes.Items.Add(new ListItem("Outubro",   "10"));
            ddlMes.Items.Add(new ListItem("Novembro",  "11"));
            ddlMes.Items.Add(new ListItem("Dezembro",  "12"));

            for (int ano = 2009; ano <= 2016; ano++)
                ddlAno.Items.Add(new ListItem(ano.ToString(), ano.ToString()));

            ddlAno.SelectedValue = Convert.ToString(DateTime.Now.Year);
            ddlMes.SelectedValue = Convert.ToString(DateTime.Now.Month);
        }
    }
}